package com.ming.common.validator;

import com.ming.common.Constant;
import com.ming.common.exception.BussiException;

import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import java.util.Set;

/**
 * 数据校验器
 */
public class ValidatorUtil {

    public static  final Validator validator;

    static {
        /**
         * 创建一个数据校验器
         */
        validator = Validation.buildDefaultValidatorFactory().getValidator();

    }

    /**
     * 进行一个具体的校验   任何类型
     * @param obj
     */
    public static void validator(Object obj){
        //进行数据校验
        /** 怎么校验：会检查数据的所有的属性
         获取实行上的注解 按照注解的属性进行校验
         校验如果不通过，就会将注解中的message返回
         */
        Set<ConstraintViolation<Object>> validate = validator.validate(obj);

        //如果set不为空
        if (validate.isEmpty()){
            for (ConstraintViolation<Object> objectConstraintViolation : validate) {
                //校验不通过的消息，将消息返回给前端
                String message = objectConstraintViolation.getMessage();
                //此时应该使用Response对象将转化为JSON返回给前端
                //可以利用springmvc的全局异常处理器 抛出一个异常
                //springmvc的全局异常处理器，就接受这个异常进行处理

                throw new BussiException(Constant.VALIDATOR_PARAM_ERROR_CODE,message);


            }
        }
    }
}
